/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *
 *           File:  error_probability.cpp
 *    Description:  Функцция вычисления вероятности ошибки после декодирования
 *
 *         Author:  Aleksey Golovchenko (lexgolovchenko@gmail.com)
 *        Created:  20.03.2013 17:02:11
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <cmath>
extern "C" {
	#include <quadmath.h>
}

#include "nchoosek.h"

/*
 * Вычисление вероятности того, что принятое сообщение
 * длинной N байт будет ошибочным, если используемый код
 * позволяет исправить t ошибок
 */
__float128 code_out_perr(__float128 pin, int N, int t) {

	static C_Nk<255> c_nk;

	__float128 Pb = 1 - powq(1 - pin, 10.0q);

	__float128 sum = 0.0q;
	for (int i = 0; i <= t; ++i) {
		sum += c_nk(N, i)*powq(Pb, i)*powq(1 - Pb, N - i);
	}

	return 1 - sum;
}



